﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;

namespace Iudicium.Persona.CRN
{
    /// <summary>
    /// Descripción breve de RepresentanteCRN
    /// </summary>
    public class RepresentanteCRN
    {
	    public RepresentanteCRN()
	    {
		    //
		    // TODO: Agregar aquí la lógica del constructor
		    //
	    }

        public static void InsertRepresentanteByList(int personaJuridicaId, List<string> idList)
        {
            if (personaJuridicaId <= 0)
            {
                throw new ArgumentException("personaJuridicaId no puede ser menor o igual a cero.");
            }

            if (idList == null )
            {
                throw new ArgumentException("La lista de ids no puede ser nula");
            }

            if (idList.Count == 0)
            {
                throw new ArgumentException("La lista de ids no puede estar vacia.");
            }

            string list = BuildIdListToString(idList);

            RepresentanteDSTableAdapters.RepresentanteTableAdapter adapter =
                new RepresentanteDSTableAdapters.RepresentanteTableAdapter();

            adapter.Insert(personaJuridicaId, list);
        }

        public static void InsertRepresentanteByList(int personaJuridicaId, string idList)
        {
            if (personaJuridicaId <= 0)
            {
                throw new ArgumentException("personaJuridicaId no puede ser menor o igual a cero.");
            }

            if (string.IsNullOrEmpty(idList))
            {
                throw new ArgumentException("La lista de ids no puede ser nula o vacia.");
            }

            RepresentanteDSTableAdapters.RepresentanteTableAdapter adapter =
                new RepresentanteDSTableAdapters.RepresentanteTableAdapter();

            adapter.Insert(personaJuridicaId, idList);
        }

        public static void DeleteRepresentantesByIdList(int personaJuridicaId, string idList)
        {
            if (personaJuridicaId <= 0)
            {
                throw new ArgumentException("personaJuridicaId no puede ser menor o igual a cero.");
            }

            if (string.IsNullOrEmpty(idList))
            {
                throw new ArgumentException("La lista de ids de representantes no puede ser nula o vacia.");
            }

            RepresentanteDSTableAdapters.RepresentanteTableAdapter adapter =
                new RepresentanteDSTableAdapters.RepresentanteTableAdapter();

            adapter.Delete(personaJuridicaId, idList);
        }

        public static void DeleteRepresentantesByIdList(int personaJuridicaId,List<string> idList)
        {
            if (personaJuridicaId <= 0)
            {
                throw new ArgumentException("personaJuridicaId no puede ser menor o igual a cero.");
            }

            if (idList == null)
            {
                throw new ArgumentException("La lista de ids de representantes no puede ser nula.");
            }

            if (idList.Count == 0)
            {
                throw new ArgumentException("La lista de ids de representantes no puede estar vacia.");
            }

            string list = BuildIdListToString(idList);

            RepresentanteDSTableAdapters.RepresentanteTableAdapter adapter =
                new RepresentanteDSTableAdapters.RepresentanteTableAdapter();

            adapter.Delete(personaJuridicaId, list);
        }

        public static List<Representante> GetRepresentantesByPersonaJuridicaId(int personaJuridicaId)
        {
            if (personaJuridicaId <= 0)
            {
                throw new ArgumentException("PersonaJuridicaId no puede ser menor o igual.");
            }

            RepresentanteDSTableAdapters.RepresentanteTableAdapter adapter =
                new RepresentanteDSTableAdapters.RepresentanteTableAdapter();

            RepresentanteDS.RepresentanteDataTable tabla =
                adapter.GetRepresentantesByPersonaJuridicaId(personaJuridicaId);

            if (tabla == null)
            {
                throw new Exception("Ocurrio un error al ejecutar el SQL dado que se obtuvieron resultados nulos.");
            }

            List<Representante> lista = new List<Representante>();
            foreach (RepresentanteDS.RepresentanteRow row in tabla)
            {
                Representante obj = ConstruirRepresentante(row);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        private static Representante ConstruirRepresentante(RepresentanteDS.RepresentanteRow row)
        {
            if (row == null)
                return null;
            return new Representante(row.representanteId, row.personaNaturalId, row.personaJuridicaId, row.nombre);
        }

        private static string BuildIdListToString(List<string> idList)
        {
            StringBuilder str = new StringBuilder();
            foreach (string e in idList)
            {
                str.Append(e).Append(",");
            }
            string list = str.ToString();
            if (list.Length > 0)
            {
                list = list.Substring(0, list.Length - 1);
            }
            return list;
        }
    }
}
